Correct vmem violations in gpx. Remove sandbagging.
authorrobertl <robertl@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Thu, 8 Jan 2004 16:07:20 +0000 (16:07 +0000)
committerrobertl <robertl@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Thu, 8 Jan 2004 16:07:20 +0000 (16:07 +0000)
gpsbabel/gpx.c
gpsbabel/vmem.c

index c989e74df88aa9256d6a3eee4b6b176dd71f279d..7c153301d9dfc07edf7f7426d623fee529071877 100644 (file)
@@ -339,7 +339,7 @@ gpx_start(void *data, const char *el, const char **attr)
 {
        char *e;
        char *ep;
-       vmem_realloc(&current_tag, strlen(current_tag.mem) + 1 + strlen(el));
+       vmem_realloc(&current_tag, strlen(current_tag.mem) + 2 + strlen(el));
        e = current_tag.mem;
        ep = e + strlen(e);
        *ep++ = '/';
@@ -636,9 +636,10 @@ gpx_cdata(void *dta, const XML_Char *s, int len)
        char **cdata;
        xml_tag *tmp_tag;
 
-       vmem_realloc(&cdatastr, len + strlen(cdatastr.mem));
+       vmem_realloc(&cdatastr,  1 + len + strlen(cdatastr.mem));
        estr = (char *) cdatastr.mem + strlen(cdatastr.mem);
        memcpy(estr, s, len);
+       estr[len]  = 0;
 
        if (!cur_tag) 
                return;
@@ -671,7 +672,7 @@ void
 gpx_rd_init(const char *fname)
 {
        if ( fname[0] ) {
-               fd = fopen(fname, "r");
+               fd = fopen(fname, "r");
                if (fd == NULL) {
                        fatal(MYNAME ": Cannot open %s for reading\n", fname );
                }
index b5dbde2cfaf5e0aa36c1fb281ecc133788176305..32eda7aae10795347732c427064affdeab119350 100644 (file)
@@ -58,7 +58,7 @@ vmem_realloc(vmem_t *vm, size_t size)
         * Reallocate only if we must.
         */
        if (size > vm->size) {
-               vm->mem = xrealloc(vm->mem, size + 20);
+               vm->mem = xrealloc(vm->mem, size);
                vm->size = size;
        }
        return;